package com.example.myqcloud.oss.cloud;


import java.io.InputStream;
import java.util.UUID;

/**
 * 云存储(腾讯云)
 *
 * @author 江黎
 * @since 2022-05-12
 */
public abstract class AbstractCloudStorageService {
    /**
     * 云存储配置信息
     */
    CloudStorageProperties config;

    /**
     * 文件路径
     *
     * @param path   文件路径，不包含文件名
     * @param suffix 后缀
     * @return 返回上传路径
     */
    public String getPath(String path, String suffix) {
        //文件重命名
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        return path + "/" + uuid + "." + suffix;
    }

    /**
     * 文件上传
     *
     * @param data 文件字节数组
     * @param path 文件路径，包含文件名
     * @return 返回http地址
     */
    public abstract String upload(byte[] data, String path);

    /**
     * 文件上传
     *
     * @param data   文件字节数组
     * @param suffix 后缀
     * @return 返回http地址
     */
    public abstract String uploadSuffix(byte[] data, String suffix);

    /**
     * 文件上传
     *
     * @param inputStream 字节流
     * @param path        文件路径，包含文件名
     * @return 返回http地址
     */
    public abstract String upload(InputStream inputStream, String path);

    /**
     * 文件上传
     *
     * @param inputStream 字节流
     * @param suffix      后缀
     * @return 返回http地址
     */
    public abstract String uploadSuffix(InputStream inputStream, String suffix);

    /**
     * 复制文件
     *
     * @param sourceKey 源文件对象健
     * @param targetKey 目标文件对象健
     */
    public abstract void copy(String sourceKey, String targetKey);

    /**
     * 删除文件
     *
     * @param bucketName Bucket的命名格式为 BucketName-APPID ，此处填写的存储桶名称必须为此格式
     * @param objectKey  指定被删除的文件在 COS 上的路径，即对象键。例如对象键为folder/picture.jpg，则表示删除位于 folder 路径下的文件 picture.jpg
     */
    public abstract void delete(String bucketName, String objectKey);

}
